home *** CD-ROM | disk | FTP | other *** search
/ C/C++ Users Group Library 1996 July / C-C++ Users Group Library July 1996.iso / vol_200 / 297_01 / make.spr < prev    next >
Text File  |  1980-01-01  |  2KB  |  105 lines

  1. /* make.spr */
  2. /* The make utility -an unusual application of Prolog */
  3. /* just to make you think */
  4. /* not only this is unfinished but it requires you define 
  5.    a new builtin to compare file dates 
  6.  */
  7. ((make)
  8.  (explicit_rule Targets Sources Actions)
  9.  (cut)
  10.  (make_all Sources)
  11.  (sources_more_recent Sources Targets)
  12.  (execute_actions  Actions)
  13. )
  14. ((make Target)
  15.  (explicit_rule Targets Sources Actions)
  16.  (member Target Targets)
  17.  (cut)
  18.  (make_all Sources)
  19.  (sources_more_recent Sources Targets)
  20.  (execute Actions)
  21. )
  22. ((make Target)
  23.  (implicit_rule Target_Type Source_Type Implicit_Actions)
  24.  (file_type Target Target_Type)
  25.  (determine_source Target Source_Type Source)
  26.  (make Source)
  27.  (build_actions Implicit_Actions Target Actions)
  28.  (execute_actions Actions)
  29. )
  30. ((make Target)
  31.  (files_exists Targets)
  32.  (cut)
  33. )
  34. ((make Targets)
  35.  (writes "Don't know how to make ")
  36.  (display Targets)
  37.  (nl)
  38. )
  39.  
  40. ((rule Targets Sources Actions)
  41.  (explicit_rule Targets Sources Actions)
  42.  (cut)
  43. )
  44. ((rule Targets Sources Actions)
  45.  (implicit_rule Target_Type Source_Type IR_Actions)
  46.  (file_type 
  47.  /* complete this !!*/
  48. )
  49.  
  50. ((sources_more_recent (Source | Rest_Sources) Targets)
  51.  (one_target_more_old Source Target)
  52. )
  53. ((sources_more_recent (Source | Rest_Sources) Targets)
  54.  (sources_more_recent Rest_Sources Targets)
  55. ((one_target_more_old Source (Target | Rest_Targets))
  56.  (file_more_recent Source Target)
  57.  (cut)
  58. )
  59. ((one_target_more_old Source (Target | Rest_Targets))
  60.  (one_target_more_old Source Rest_Targets)
  61. )
  62.  
  63. ((execute_actions (Action | Rest_Actions))
  64.  (execute_action Action)
  65.  (execute_actions Rest_Actions
  66. )
  67. (execute_actions ())
  68.  
  69. ((execute_action String_List)
  70.  (build_command String_List Command)
  71.  (system Command Return_Val)
  72.  (handle_return_val Command Return_Val)
  73. )
  74. ((build_command (String | Rest_Strings) Command)
  75.  (build_command1 (String | Rest_Strings) "" Command)/* a little wasteful */
  76. )
  77. ((build_command1 (String | Rest_Strings) String_so_far Command)
  78.  (string_concat String_so_far String String2)
  79.  (build_command1 Rest_Strings String2 Command)
  80. )
  81. (build_command () Command Command)
  82.  
  83. ((handle_return_val _ 0)(cut))
  84. ((handle_return_val Command N)
  85.  (writes Command)
  86.  (writes " failed")(nl)
  87.  (abort)
  88. )
  89.  
  90. ((make_all (File |Rest_Files))
  91.  (make File)
  92.  (make_all Rest_files)
  93. )
  94. (make_all ())
  95.  
  96. /* sample rules */
  97.  
  98. ((implict_rule "o" "c")
  99.  (cflags Flags)
  100.  (cc Flags "-c" )
  101. )
  102.  
  103. /* end of file */
  104.